; Mon Nov 22 16:58:06 CET 2010
; 
;+ (version "3.4.4")
;+ (build "Build 579")


(defclass %3ACLIPS_TOP_LEVEL_SLOT_CLASS "Fake class to save top-level slot information"
	(is-a USER)
	(role abstract)
	(single-slot condiciones_fisicas
		(type INSTANCE)
;+		(allowed-classes)
;+		(cardinality 1 1)
		(create-accessor read-write))
	(single-slot apellidos
		(type STRING)
;+		(cardinality 1 1)
		(create-accessor read-write))
	(single-slot dni
		(type STRING)
;+		(cardinality 1 1)
		(create-accessor read-write))
	(single-slot Nombre_Ejer
		(type STRING)
;+		(cardinality 0 1)
		(create-accessor read-write))
	(multislot enfermedades
		(type INSTANCE)
;+		(allowed-classes)
		(create-accessor read-write))
	(multislot salud
		(type INSTANCE)
;+		(allowed-classes)
		(create-accessor read-write))
	(single-slot dedicacion
		(type FLOAT)
;+		(cardinality 0 1)
		(create-accessor read-write))
	(single-slot pulsaciones_por_minuto
		(type INTEGER)
;+		(cardinality 1 1)
		(create-accessor read-write))
	(single-slot tipo_ejercicio
		(type INSTANCE)
;+		(allowed-classes Ejercicio)
;+		(cardinality 1 1)
		(create-accessor read-write))
	(single-slot disciplina
		(type STRING)
;+		(cardinality 0 1)
		(create-accessor read-write))
	(single-slot tipo_sin_pesas
		(type SYMBOL)
		(allowed-values footing subir_bajar_escaleras)
;+		(cardinality 0 1)
		(create-accessor read-write))
	(single-slot Pesa_Kilos
		(type STRING)
;+		(cardinality 0 1)
		(create-accessor read-write))
	(multislot combina_con
		(type SYMBOL)
;+		(allowed-parents Ejercicio)
		(create-accessor read-write))
	(single-slot Duraci%C3%B3n_Max
		(type INTEGER)
;+		(cardinality 1 1)
		(create-accessor read-write))
	(single-slot tipo_desplazamiento
		(type SYMBOL)
		(allowed-values a_pie en_coche bicicleta)
;+		(cardinality 1 1)
		(create-accessor read-write))
	(single-slot molestias_musculares
		(type SYMBOL)
		(allowed-values FALSE TRUE)
;+		(cardinality 1 1)
		(create-accessor read-write))
	(multislot habitos_personales
		(type INSTANCE)
;+		(allowed-classes)
		(cardinality 1 ?VARIABLE)
		(create-accessor read-write))
	(single-slot flexibilidad
		(type SYMBOL)
;+		(cardinality 0 1)
		(create-accessor read-write))
	(single-slot modalidad
		(type SYMBOL)
		(allowed-values flexibilidad fuerza resistencia velocidad equilibrio)
;+		(cardinality 1 1)
		(create-accessor read-write))
	(single-slot tipo_dieta
		(type SYMBOL)
		(allowed-values frutas verduras carne pescado cereales tuberculos marisco)
;+		(cardinality 0 1)
		(create-accessor read-write))
	(single-slot nombre
		(type STRING)
;+		(cardinality 1 1)
		(create-accessor read-write))
	(single-slot Nombre_Ej
		(type STRING)
;+		(cardinality 0 1)
		(create-accessor read-write))
	(single-slot nombre_musculo
		(type STRING)
;+		(cardinality 0 1)
		(create-accessor read-write))
	(single-slot mareo
		(type SYMBOL)
		(allowed-values FALSE TRUE)
;+		(cardinality 1 1)
		(create-accessor read-write))
	(multislot grupos_musculares
		(type INSTANCE)
;+		(allowed-classes Musculo)
		(cardinality 1 ?VARIABLE)
		(create-accessor read-write))
	(single-slot tipo_suelo
		(type SYMBOL)
		(allowed-values abdominales flexiones sentadillas)
;+		(cardinality 0 1)
		(create-accessor read-write))
	(single-slot altura
		(type FLOAT)
;+		(cardinality 1 1)
		(create-accessor read-write))
	(single-slot Identificador
		(type INTEGER)
;+		(cardinality 0 1)
		(create-accessor read-write))
	(single-slot tipo_hogar
		(type SYMBOL)
		(allowed-values barrer fregar lavadora)
;+		(cardinality 0 1)
		(create-accessor read-write))
	(single-slot presion_sanguinea_min
		(type FLOAT)
;+		(cardinality 1 1)
		(create-accessor read-write))
	(multislot objetivos
		(type INSTANCE)
;+		(allowed-classes)
		(create-accessor read-write))
	(single-slot peso
		(type FLOAT)
;+		(cardinality 1 1)
		(create-accessor read-write))
	(single-slot tipo
		(type SYMBOL)
		(allowed-values sentado de_pie)
;+		(cardinality 1 1)
		(create-accessor read-write))
	(single-slot series
		(type INTEGER)
;+		(cardinality 1 1)
		(create-accessor read-write))
	(single-slot Posicion
		(type STRING)
;+		(cardinality 0 1)
		(create-accessor read-write))
	(single-slot NRepeticiones
		(type INTEGER)
;+		(cardinality 1 1)
		(create-accessor read-write))
	(single-slot NCalorias%2Fminuto
		(type INTEGER)
;+		(cardinality 1 1)
		(create-accessor read-write))
	(single-slot tipo_enfermedad
		(type SYMBOL)
		(allowed-values asma obesidad pies_planos)
;+		(cardinality 0 1)
		(create-accessor read-write))
	(single-slot tipo_afecta
		(type SYMBOL)
		(allowed-values presion_alta dolores_musculares articulaciones mareos vertigo)
;+		(cardinality 0 1)
		(create-accessor read-write))
	(single-slot duracion
		(type FLOAT)
;+		(cardinality 1 1)
		(create-accessor read-write))
	(single-slot tipo_trabajo
		(type SYMBOL)
		(allowed-values sentado de_pie)
;+		(cardinality 1 1)
		(create-accessor read-write))
	(single-slot Gr
		(type STRING)
;+		(cardinality 0 1)
		(create-accessor read-write))
	(single-slot tipo_objetivo
		(type SYMBOL)
		(allowed-values ponerse_en_forma rebajar_peso musculacion flexibilidad equilibrio)
;+		(cardinality 0 1)
		(create-accessor read-write))
	(single-slot indice_masa_corporal
		(type FLOAT)
;+		(cardinality 0 1)
		(create-accessor read-write))
	(single-slot frequencia
		(type INTEGER)
;+		(cardinality 1 1)
		(create-accessor read-write))
	(single-slot tipo_no_trabajo
		(type SYMBOL)
		(allowed-values sentado de_pie levantar_pesos)
;+		(cardinality 1 1)
		(create-accessor read-write))
	(single-slot tipo_pesas
		(type SYMBOL)
		(allowed-values barra mancuerna maquina)
;+		(cardinality 0 1)
		(create-accessor read-write))
	(multislot dieta
		(type INSTANCE)
;+		(allowed-classes)
		(create-accessor read-write))
	(single-slot tipo_musculos
		(type SYMBOL)
		(allowed-values biceps triceps cuatriceps gemelos pectoral_mayor flexor_radial_brazo trapecio deltoides gran_dorsal serrato recto_abdominal oblicuo_abdominal gluteo sartorio biceps_femoral soleo tend%C3%B3n_de_aquiles tibial cervical)
;+		(cardinality 1 1)
		(create-accessor read-write))
	(single-slot localizacion
		(type SYMBOL)
		(allowed-values brazo pierna tronco)
;+		(cardinality 1 1)
		(create-accessor read-write))
	(single-slot problemas_musculares
		(type INSTANCE)
;+		(allowed-classes Musculo)
;+		(cardinality 1 1)
		(create-accessor read-write))
	(single-slot kilos
		(type INTEGER)
;+		(cardinality 1 1)
		(create-accessor read-write))
	(single-slot Dificultad
		(type STRING)
;+		(cardinality 0 1)
		(create-accessor read-write))
	(single-slot Tipo_
		(type STRING)
;+		(cardinality 0 1)
		(create-accessor read-write))
	(multislot ejercicio_evaluador
		(type INSTANCE)
;+		(allowed-classes Ejercicio_Evaluador)
		(cardinality 1 ?VARIABLE)
		(create-accessor read-write))
	(single-slot Duraci%C3%B3n_Min
		(type INTEGER)
;+		(cardinality 1 1)
		(create-accessor read-write))
	(single-slot tipo_aparato
		(type SYMBOL)
		(allowed-values bici_estatica cinta remo stepper pesos)
;+		(cardinality 1 1)
		(create-accessor read-write))
	(single-slot email
		(type STRING)
;+		(cardinality 1 1)
		(create-accessor read-write))
	(single-slot esfuerzo
		(type SYMBOL)
		(allowed-values bajo medio alto)
;+		(cardinality 0 1)
		(create-accessor read-write))
	(single-slot tipo_estiramiento
		(type INSTANCE)
;+		(allowed-classes Musculo)
;+		(cardinality 0 1)
		(create-accessor read-write))
	(single-slot presion_sanguinea_max
		(type FLOAT)
;+		(cardinality 1 1)
		(create-accessor read-write))
	(single-slot edad
		(type INTEGER)
;+		(cardinality 1 1)
		(create-accessor read-write))
	(single-slot cantidad
		(type INTEGER)
;+		(cardinality 0 1)
		(create-accessor read-write)))

(defclass Ejercicio
	(is-a USER)
	(role abstract)
	(single-slot NCalorias%2Fminuto
		(type INTEGER)
;+		(cardinality 1 1)
		(create-accessor read-write))
	(multislot combina_con
		(type SYMBOL)
;+		(allowed-parents Ejercicio)
		(create-accessor read-write))
	(single-slot Duraci%C3%B3n_Max
		(type INTEGER)
;+		(cardinality 1 1)
		(create-accessor read-write))
	(multislot grupos_musculares
		(type INSTANCE)
;+		(allowed-classes Musculo)
		(cardinality 1 ?VARIABLE)
		(create-accessor read-write))
	(single-slot esfuerzo
		(type SYMBOL)
		(allowed-values bajo medio alto)
;+		(cardinality 0 1)
		(create-accessor read-write))
	(single-slot series
		(type INTEGER)
;+		(cardinality 1 1)
		(create-accessor read-write))
	(single-slot Duraci%C3%B3n_Min
		(type INTEGER)
;+		(cardinality 1 1)
		(create-accessor read-write))
	(single-slot Identificador
		(type INTEGER)
;+		(cardinality 0 1)
		(create-accessor read-write))
	(single-slot modalidad
		(type SYMBOL)
		(allowed-values flexibilidad fuerza resistencia velocidad equilibrio)
;+		(cardinality 1 1)
		(create-accessor read-write))
	(single-slot NRepeticiones
		(type INTEGER)
;+		(cardinality 1 1)
		(create-accessor read-write))
	(single-slot Nombre_Ejer
		(type STRING)
;+		(cardinality 0 1)
		(create-accessor read-write)))

(defclass Con_Aparatos
	(is-a Ejercicio)
	(role concrete)
	(single-slot tipo_aparato
		(type SYMBOL)
		(allowed-values bici_estatica cinta remo stepper pesos)
;+		(cardinality 1 1)
		(create-accessor read-write)))

(defclass Con_Pesas
	(is-a Ejercicio)
	(role concrete)
	(single-slot Pesa_Kilos
		(type STRING)
;+		(cardinality 0 1)
		(create-accessor read-write))
	(single-slot tipo_pesas
		(type SYMBOL)
		(allowed-values barra mancuerna maquina)
;+		(cardinality 0 1)
		(create-accessor read-write)))

(defclass Sin_Pesas
	(is-a Ejercicio)
	(role concrete)
	(single-slot tipo_sin_pesas
		(type SYMBOL)
		(allowed-values footing subir_bajar_escaleras)
;+		(cardinality 0 1)
		(create-accessor read-write)))

(defclass De_Suelo
	(is-a Ejercicio)
	(role concrete)
	(single-slot tipo_suelo
		(type SYMBOL)
		(allowed-values abdominales flexiones sentadillas)
;+		(cardinality 0 1)
		(create-accessor read-write)))

(defclass Estiramientos
	(is-a Ejercicio)
	(role concrete))

(defclass Flexibilidad
	(is-a Ejercicio)
	(role concrete)
	(single-slot disciplina
		(type STRING)
;+		(cardinality 0 1)
		(create-accessor read-write))
	(single-slot Posicion
		(type STRING)
;+		(cardinality 0 1)
		(create-accessor read-write)))

(defclass Ejercicio_Evaluador
	(is-a USER)
	(role concrete)
	(single-slot tipo_ejercicio
		(type INSTANCE)
;+		(allowed-classes Ejercicio)
;+		(cardinality 1 1)
		(create-accessor read-write))
	(single-slot molestias_musculares
		(type SYMBOL)
		(allowed-values FALSE TRUE)
;+		(cardinality 1 1)
		(create-accessor read-write))
	(single-slot pulsaciones_por_minuto
		(type INTEGER)
;+		(cardinality 1 1)
		(create-accessor read-write))
	(single-slot mareo
		(type SYMBOL)
		(allowed-values FALSE TRUE)
;+		(cardinality 1 1)
		(create-accessor read-write)))

(defclass Musculo
	(is-a USER)
	(role concrete)
	(single-slot localizacion
		(type SYMBOL)
		(allowed-values brazo pierna tronco)
;+		(cardinality 1 1)
		(create-accessor read-write))
	(single-slot tipo_musculos
		(type SYMBOL)
		(allowed-values biceps triceps cuatriceps gemelos pectoral_mayor flexor_radial_brazo trapecio deltoides gran_dorsal serrato recto_abdominal oblicuo_abdominal gluteo sartorio biceps_femoral soleo tend%C3%B3n_de_aquiles tibial cervical)
;+		(cardinality 1 1)
		(create-accessor read-write)))

(definstances instancies

; Thu Dec 30 17:51:03 CET 2010
; 
;+ (version "3.4.4")
;+ (build "Build 579")

([IA_Class0] of  Musculo

	(localizacion tronco)
	(tipo_musculos pectoral_mayor))

([IA_Class1] of  Musculo

	(localizacion brazo)
	(tipo_musculos flexor_radial_brazo))

([IA_Class10000] of  Con_Pesas

	(Duraci%C3%B3n_Max 60)
	(Duraci%C3%B3n_Min 10)
	(esfuerzo bajo)
	(grupos_musculares [IA_Class20003])
	(Identificador 9)
	(modalidad fuerza)
	(NCalorias%2Fminuto 50)
	(Nombre_Ejer "Mancuerna deltoides 3 Kg")
	(NRepeticiones 12)
	(Pesa_Kilos "3")
	(series 4)
	(tipo_pesas mancuerna))

([IA_Class10001] of  Musculo

	(localizacion brazo)
	(tipo_musculos biceps))

([IA_Class10002] of  Musculo

	(localizacion brazo)
	(tipo_musculos triceps))

([IA_Class10003] of  Musculo

	(localizacion pierna)
	(tipo_musculos gemelos))

([IA_Class10004] of  De_Suelo

	(combina_con De_Suelo)
	(Duraci%C3%B3n_Max 30)
	(Duraci%C3%B3n_Min 15)
	(grupos_musculares [IA_Class20006])
	(Identificador 12)
	(modalidad fuerza)
	(NCalorias%2Fminuto 55)
	(Nombre_Ejer "Abdominales")
	(NRepeticiones 25)
	(series 4)
	(tipo_suelo abdominales))

([IA_Class10007] of  Con_Aparatos

	(combina_con
		Con_Aparatos
		Estiramientos)
	(Duraci%C3%B3n_Max 60)
	(Duraci%C3%B3n_Min 60)
	(esfuerzo alto)
	(grupos_musculares
		[IA_Class2]
		[IA_Class10003]
		[IA_Class20014]
		[IA_Class20013])
	(Identificador 1)
	(modalidad resistencia)
	(NCalorias%2Fminuto 200)
	(Nombre_Ejer "Bici Estatica 60 minutos")
	(NRepeticiones 1)
	(series 1)
	(tipo_aparato bici_estatica))

([IA_Class10009] of  Con_Pesas

	(combina_con
		Estiramientos
		Con_Pesas)
	(Duraci%C3%B3n_Max 15)
	(Duraci%C3%B3n_Min 10)
	(esfuerzo bajo)
	(grupos_musculares [IA_Class10001])
	(Identificador 8)
	(modalidad fuerza)
	(NCalorias%2Fminuto 50)
	(Nombre_Ejer "Mancuerna Biceps 3 Kg")
	(NRepeticiones 12)
	(Pesa_Kilos "3")
	(series 4)
	(tipo_pesas mancuerna))

([IA_Class10011] of  Estiramientos

	(combina_con Estiramientos)
	(Duraci%C3%B3n_Max 10)
	(Duraci%C3%B3n_Min 2)
	(esfuerzo bajo)
	(grupos_musculares [IA_Class10001])
	(Identificador 15)
	(modalidad flexibilidad)
	(NCalorias%2Fminuto 10)
	(Nombre_Ejer "Estirar biceps")
	(NRepeticiones 1)
	(series 2))

([IA_Class10013] of  Sin_Pesas

	(combina_con Con_Aparatos)
	(Duraci%C3%B3n_Max 60)
	(Duraci%C3%B3n_Min 30)
	(esfuerzo alto)
	(grupos_musculares
		[IA_Class10003]
		[IA_Class2])
	(Identificador 43)
	(modalidad resistencia)
	(NCalorias%2Fminuto 250)
	(Nombre_Ejer "footing")
	(NRepeticiones 1)
	(series 1)
	(tipo_sin_pesas footing))

([IA_Class10019] of  Sin_Pesas

	(Duraci%C3%B3n_Max 10)
	(Duraci%C3%B3n_Min 7)
	(esfuerzo bajo)
	(grupos_musculares
		[IA_Class2]
		[IA_Class10003])
	(Identificador 44)
	(modalidad resistencia)
	(NCalorias%2Fminuto 50)
	(Nombre_Ejer "Subir Bajar escaleras")
	(NRepeticiones 1)
	(series 1)
	(tipo_sin_pesas subir_bajar_escaleras))

([IA_Class10020] of  Ejercicio_Evaluador

	(mareo FALSE)
	(molestias_musculares FALSE)
	(pulsaciones_por_minuto 110)
	(tipo_ejercicio [IA_Class10019]))

([IA_Class2] of  Musculo

	(localizacion pierna)
	(tipo_musculos cuatriceps))

([IA_Class20000] of  Con_Pesas

	(Duraci%C3%B3n_Max 60)
	(Duraci%C3%B3n_Min 10)
	(esfuerzo bajo)
	(grupos_musculares [IA_Class0])
	(Identificador 6)
	(modalidad fuerza)
	(NCalorias%2Fminuto 50)
	(Nombre_Ejer "Barra pectoral mayor 3 Kg")
	(NRepeticiones 12)
	(Pesa_Kilos "3")
	(series 4)
	(tipo_pesas barra))

([IA_Class20001] of  Con_Pesas

	(Duraci%C3%B3n_Max 60)
	(Duraci%C3%B3n_Min 15)
	(esfuerzo bajo)
	(grupos_musculares [IA_Class2])
	(Identificador 5)
	(modalidad fuerza)
	(NCalorias%2Fminuto 80)
	(Nombre_Ejer "Sentadilla:Barra cuatriceps 5 Kg")
	(NRepeticiones 15)
	(Pesa_Kilos "5")
	(series 5)
	(tipo_pesas barra))

([IA_Class20002] of  Musculo

	(localizacion tronco)
	(tipo_musculos trapecio))

([IA_Class20003] of  Musculo

	(localizacion brazo)
	(tipo_musculos deltoides))

([IA_Class20004] of  Musculo

	(localizacion swfgdfg)
	(tipo_musculos gran_dorsal))

([IA_Class20005] of  Musculo

	(localizacion tronco)
	(tipo_musculos serrato))

([IA_Class20006] of  Musculo

	(localizacion tronco)
	(tipo_musculos recto_abdominal))

([IA_Class20007] of  Musculo

	(localizacion tronco)
	(tipo_musculos oblicuo_abdominal))

([IA_Class20008] of  Musculo

	(localizacion tronco)
	(tipo_musculos gluteo))

([IA_Class20009] of  Musculo

	(localizacion pierna)
	(tipo_musculos sartorio))

([IA_Class20010] of  Musculo

	(localizacion pierna)
	(tipo_musculos biceps_femoral))

([IA_Class20011] of  Musculo

	(localizacion pierna)
	(tipo_musculos soleo))

([IA_Class20013] of  Musculo

	(localizacion pierna)
	(tipo_musculos tend%C3%B3n_de_aquiles))

([IA_Class20014] of  Musculo

	(localizacion pierna)
	(tipo_musculos tibial))

([IA_Class20015] of  Con_Aparatos

	(Duraci%C3%B3n_Max 10)
	(Duraci%C3%B3n_Min 5)
	(esfuerzo bajo)
	(grupos_musculares
		[IA_Class20004]
		[IA_Class10002]
		[IA_Class10001])
	(Identificador 3)
	(modalidad fuerza)
	(NCalorias%2Fminuto 15)
	(Nombre_Ejer "Remo 10 minutos")
	(NRepeticiones 1)
	(series 1)
	(tipo_aparato remo))

([IA_Class20016] of  Con_Aparatos

	(Duraci%C3%B3n_Max 10)
	(Duraci%C3%B3n_Min 7)
	(esfuerzo bajo)
	(grupos_musculares
		[IA_Class2]
		[IA_Class20008]
		[IA_Class20011])
	(Identificador 2)
	(modalidad velocidad)
	(NCalorias%2Fminuto 20)
	(Nombre_Ejer "Cinta 10 minutos")
	(NRepeticiones 1)
	(series 1)
	(tipo_aparato cinta))

([IA_Class20017] of  Con_Aparatos

	(Duraci%C3%B3n_Max 12)
	(Duraci%C3%B3n_Min 15)
	(esfuerzo bajo)
	(grupos_musculares [IA_Class10003])
	(Identificador 4)
	(modalidad resistencia)
	(NCalorias%2Fminuto 15)
	(Nombre_Ejer "Steps 12 minutos")
	(NRepeticiones 1)
	(series 1)
	(tipo_aparato stepper))

([IA_Class30002] of  Con_Aparatos

	(combina_con
		Con_Aparatos
		Estiramientos)
	(Duraci%C3%B3n_Max 10)
	(Duraci%C3%B3n_Min 10)
	(esfuerzo bajo)
	(grupos_musculares
		[IA_Class2]
		[IA_Class10003]
		[IA_Class20014]
		[IA_Class20013])
	(Identificador 1)
	(modalidad velocidad)
	(NCalorias%2Fminuto 200)
	(Nombre_Ejer "Bici Estatica 10 minutos")
	(NRepeticiones 1)
	(series 1)
	(tipo_aparato bici_estatica))

([IA_Class30003] of  Con_Aparatos

	(Duraci%C3%B3n_Max 35)
	(Duraci%C3%B3n_Min 25)
	(esfuerzo alto)
	(grupos_musculares
		[IA_Class2]
		[IA_Class20008]
		[IA_Class20011])
	(Identificador 2)
	(modalidad resistencia)
	(NCalorias%2Fminuto 20)
	(Nombre_Ejer "Cinta 35 minutos")
	(NRepeticiones 1)
	(series 1)
	(tipo_aparato cinta))

([IA_Class30004] of  Con_Aparatos

	(Duraci%C3%B3n_Max 45)
	(Duraci%C3%B3n_Min 35)
	(esfuerzo alto)
	(grupos_musculares
		[IA_Class20004]
		[IA_Class10002]
		[IA_Class10001])
	(Identificador 3)
	(modalidad resistencia)
	(NCalorias%2Fminuto 15)
	(Nombre_Ejer "Remo 45 minutos")
	(NRepeticiones 1)
	(series 1)
	(tipo_aparato remo))

([IA_Class40002] of  Con_Pesas

	(Duraci%C3%B3n_Max 50)
	(Duraci%C3%B3n_Min 14)
	(esfuerzo bajo)
	(grupos_musculares [IA_Class10002])
	(Identificador 7)
	(modalidad fuerza)
	(NCalorias%2Fminuto 40)
	(Nombre_Ejer "Barra triceps 5 Kg")
	(NRepeticiones 12)
	(Pesa_Kilos "5")
	(series 4)
	(tipo_pesas barra))

([IA_Class40003] of  De_Suelo

	(Duraci%C3%B3n_Max 30)
	(Duraci%C3%B3n_Min 10)
	(grupos_musculares [IA_Class0])
	(Identificador 13)
	(modalidad resistencia)
	(NCalorias%2Fminuto 200)
	(Nombre_Ejer "Flexiones")
	(NRepeticiones 20)
	(series 4)
	(tipo_suelo flexiones))

([IA_Class40004] of  De_Suelo

	(Duraci%C3%B3n_Max 30)
	(Duraci%C3%B3n_Min 10)
	(grupos_musculares
		[IA_Class2]
		[IA_Class20008])
	(Identificador 14)
	(modalidad fuerza)
	(NCalorias%2Fminuto 50)
	(Nombre_Ejer "Sentadillas")
	(NRepeticiones 10)
	(series 4)
	(tipo_suelo sentadillas))

([IA_Class40005] of  Estiramientos

	(Duraci%C3%B3n_Max 10)
	(Duraci%C3%B3n_Min 2)
	(esfuerzo bajo)
	(grupos_musculares [IA_Class20010])
	(Identificador 16)
	(modalidad flexibilidad)
	(NCalorias%2Fminuto 10)
	(Nombre_Ejer "Estirar biceps femoral")
	(NRepeticiones 1)
	(series 2))

([IA_Class40006] of  Estiramientos

	(Duraci%C3%B3n_Max 10)
	(Duraci%C3%B3n_Min 2)
	(esfuerzo bajo)
	(grupos_musculares [IA_Class2])
	(Identificador 17)
	(modalidad flexibilidad)
	(NCalorias%2Fminuto 10)
	(Nombre_Ejer "Estirar cuadriceps")
	(NRepeticiones 1)
	(series 2))

([IA_Class40007] of  Estiramientos

	(Duraci%C3%B3n_Max 10)
	(Duraci%C3%B3n_Min 2)
	(esfuerzo bajo)
	(grupos_musculares [IA_Class20003])
	(Identificador 18)
	(modalidad flexibilidad)
	(NCalorias%2Fminuto 10)
	(Nombre_Ejer "Estirar deltoides")
	(NRepeticiones 1)
	(series 2))

([IA_Class40008] of  Estiramientos

	(Duraci%C3%B3n_Max 10)
	(Duraci%C3%B3n_Min 2)
	(esfuerzo bajo)
	(grupos_musculares [IA_Class1])
	(Identificador 19)
	(modalidad flexibilidad)
	(NCalorias%2Fminuto 10)
	(Nombre_Ejer "Estirar flexor radial brazo")
	(NRepeticiones 1)
	(series 2))

([IA_Class40009] of  Estiramientos

	(Duraci%C3%B3n_Max 10)
	(Duraci%C3%B3n_Min 2)
	(esfuerzo bajo)
	(grupos_musculares [IA_Class10003])
	(Identificador 20)
	(modalidad flexibilidad)
	(NCalorias%2Fminuto 10)
	(Nombre_Ejer "Estirar gemelo")
	(NRepeticiones 1)
	(series 2))

([IA_Class40010] of  Estiramientos

	(Duraci%C3%B3n_Max 10)
	(Duraci%C3%B3n_Min 2)
	(esfuerzo bajo)
	(grupos_musculares [IA_Class20008])
	(Identificador 21)
	(modalidad flexibilidad)
	(NCalorias%2Fminuto 10)
	(Nombre_Ejer "Estirar gluteo")
	(NRepeticiones 1)
	(series 2))

([IA_Class40011] of  Estiramientos

	(Duraci%C3%B3n_Max 10)
	(Duraci%C3%B3n_Min 2)
	(esfuerzo bajo)
	(grupos_musculares [IA_Class20004])
	(Identificador 22)
	(modalidad flexibilidad)
	(NCalorias%2Fminuto 10)
	(Nombre_Ejer "Estirar gran dorsal")
	(NRepeticiones 1)
	(series 2))

([IA_Class40012] of  Estiramientos

	(Duraci%C3%B3n_Max 10)
	(Duraci%C3%B3n_Min 2)
	(esfuerzo bajo)
	(grupos_musculares [IA_Class20007])
	(Identificador 23)
	(modalidad flexibilidad)
	(NCalorias%2Fminuto 10)
	(Nombre_Ejer "Estirar oblicuo abdominal")
	(NRepeticiones 1)
	(series 2))

([IA_Class40013] of  Estiramientos

	(Duraci%C3%B3n_Max 10)
	(Duraci%C3%B3n_Min 2)
	(esfuerzo bajo)
	(grupos_musculares [IA_Class0])
	(Identificador 24)
	(modalidad flexibilidad)
	(NCalorias%2Fminuto 10)
	(Nombre_Ejer "Estirar Pectoral mayor")
	(NRepeticiones 1)
	(series 2))

([IA_Class40014] of  Estiramientos

	(Duraci%C3%B3n_Max 10)
	(Duraci%C3%B3n_Min 2)
	(esfuerzo bajo)
	(grupos_musculares [IA_Class20006])
	(Identificador 25)
	(modalidad flexibilidad)
	(NCalorias%2Fminuto 10)
	(Nombre_Ejer "Estirar recto abdominal")
	(NRepeticiones 1)
	(series 2))

([IA_Class40015] of  Estiramientos

	(Duraci%C3%B3n_Max 10)
	(Duraci%C3%B3n_Min 2)
	(esfuerzo bajo)
	(grupos_musculares [IA_Class20009])
	(Identificador 26)
	(modalidad flexibilidad)
	(NCalorias%2Fminuto 10)
	(Nombre_Ejer "Estirar sartorio")
	(NRepeticiones 1)
	(series 2))

([IA_Class40016] of  Estiramientos

	(Duraci%C3%B3n_Max 10)
	(Duraci%C3%B3n_Min 2)
	(esfuerzo bajo)
	(grupos_musculares [IA_Class20005])
	(Identificador 27)
	(modalidad flexibilidad)
	(NCalorias%2Fminuto 10)
	(Nombre_Ejer "Estirar serrato")
	(NRepeticiones 1)
	(series 2))

([IA_Class40017] of  Estiramientos

	(Duraci%C3%B3n_Max 10)
	(Duraci%C3%B3n_Min 2)
	(esfuerzo bajo)
	(grupos_musculares [IA_Class20011])
	(Identificador 28)
	(modalidad flexibilidad)
	(NCalorias%2Fminuto 10)
	(Nombre_Ejer "Estirar soleo")
	(NRepeticiones 1)
	(series 2))

([IA_Class40018] of  Estiramientos

	(Duraci%C3%B3n_Max 10)
	(Duraci%C3%B3n_Min 2)
	(esfuerzo bajo)
	(grupos_musculares [IA_Class20013])
	(Identificador 29)
	(modalidad flexibilidad)
	(NCalorias%2Fminuto 10)
	(Nombre_Ejer "Estirar tendón de aquiles")
	(NRepeticiones 1)
	(series 2))

([IA_Class40020] of  Estiramientos

	(Duraci%C3%B3n_Max 10)
	(Duraci%C3%B3n_Min 2)
	(esfuerzo bajo)
	(grupos_musculares [IA_Class20014])
	(Identificador 30)
	(modalidad flexibilidad)
	(NCalorias%2Fminuto 10)
	(Nombre_Ejer "Estirar tibial")
	(NRepeticiones 1)
	(series 2))

([IA_Class40021] of  Estiramientos

	(Duraci%C3%B3n_Max 10)
	(Duraci%C3%B3n_Min 2)
	(esfuerzo bajo)
	(grupos_musculares [IA_Class20002])
	(Identificador 31)
	(modalidad flexibilidad)
	(NCalorias%2Fminuto 10)
	(Nombre_Ejer "Estirar trapecio")
	(NRepeticiones 1)
	(series 2))

([IA_Class40022] of  Estiramientos

	(Duraci%C3%B3n_Max 10)
	(Duraci%C3%B3n_Min 2)
	(esfuerzo bajo)
	(grupos_musculares [IA_Class10002])
	(Identificador 32)
	(modalidad flexibilidad)
	(NCalorias%2Fminuto 10)
	(Nombre_Ejer "Estirar triceps")
	(NRepeticiones 1)
	(series 2))

([IA_Class50002] of  Flexibilidad

	(disciplina "Yoga")
	(Duraci%C3%B3n_Max 10)
	(Duraci%C3%B3n_Min 1)
	(grupos_musculares
		[IA_Class20004]
		[IA_Class20010])
	(Identificador 33)
	(modalidad flexibilidad)
	(NCalorias%2Fminuto 10)
	(Nombre_Ejer "Yoga cigüeña")
	(NRepeticiones 1)
	(Posicion "cigueña")
	(series 1))

([IA_Class50004] of  Flexibilidad

	(disciplina "Yoga")
	(Duraci%C3%B3n_Max 10)
	(Duraci%C3%B3n_Min 1)
	(grupos_musculares
		[IA_Class1]
		[IA_Class10003])
	(Identificador 38)
	(modalidad flexibilidad)
	(NCalorias%2Fminuto 10)
	(Nombre_Ejer "Yoga pavo real")
	(NRepeticiones 1)
	(Posicion "pavo real")
	(series 1))

([IA_Class50005] of  Flexibilidad

	(disciplina "Yoga")
	(Duraci%C3%B3n_Max 10)
	(Duraci%C3%B3n_Min 1)
	(grupos_musculares
		[IA_Class10001]
		[IA_Class1])
	(Identificador 34)
	(modalidad flexibilidad)
	(NCalorias%2Fminuto 10)
	(Nombre_Ejer "Yoga cuervo")
	(NRepeticiones 1)
	(Posicion "cuervo")
	(series 1))

([IA_Class50006] of  Flexibilidad

	(disciplina "Yoga")
	(Duraci%C3%B3n_Max 10)
	(Duraci%C3%B3n_Min 1)
	(grupos_musculares [IA_Class20004])
	(Identificador 41)
	(modalidad flexibilidad)
	(NCalorias%2Fminuto 10)
	(Nombre_Ejer "Yoga torsión")
	(NRepeticiones 1)
	(Posicion "torsión")
	(series 1))

([IA_Class50007] of  Flexibilidad

	(disciplina "Yoga")
	(Duraci%C3%B3n_Max 10)
	(Duraci%C3%B3n_Min 1)
	(grupos_musculares [IA_Class50009])
	(Identificador 37)
	(modalidad flexibilidad)
	(NCalorias%2Fminuto 10)
	(Nombre_Ejer "Yoga langosta")
	(NRepeticiones 1)
	(Posicion "langosta")
	(series 1))

([IA_Class50008] of  Flexibilidad

	(disciplina "Yoga")
	(Duraci%C3%B3n_Max 10)
	(Duraci%C3%B3n_Min 1)
	(grupos_musculares
		[IA_Class10001]
		[IA_Class20003]
		[IA_Class1])
	(Identificador 35)
	(modalidad flexibilidad)
	(NCalorias%2Fminuto 10)
	(Nombre_Ejer "Yoga delfin")
	(NRepeticiones 1)
	(Posicion "delfin")
	(series 1))

([IA_Class50009] of  Musculo

	(localizacion tronco)
	(tipo_musculos cervical))

([IA_Class50015] of  Flexibilidad

	(disciplina "Yoga")
	(Duraci%C3%B3n_Max 10)
	(Duraci%C3%B3n_Min 1)
	(grupos_musculares
		[IA_Class20004]
		[IA_Class20003])
	(Identificador 42)
	(modalidad flexibilidad)
	(NCalorias%2Fminuto 10)
	(Nombre_Ejer "Yoga triangulo")
	(NRepeticiones 1)
	(Posicion "triangulo")
	(series 1))

([IA_Class50016] of  Flexibilidad

	(disciplina "Yoga")
	(Duraci%C3%B3n_Max 10)
	(Duraci%C3%B3n_Min 1)
	(grupos_musculares
		[IA_Class20006]
		[IA_Class10003])
	(Identificador 40)
	(modalidad flexibilidad)
	(NCalorias%2Fminuto 10)
	(Nombre_Ejer "Yoga pinza")
	(NRepeticiones 1)
	(Posicion "pinza")
	(series 1))

([IA_Class50017] of  Flexibilidad

	(disciplina "Yoga")
	(Duraci%C3%B3n_Max 10)
	(Duraci%C3%B3n_Min 1)
	(grupos_musculares
		[IA_Class20003]
		[IA_Class10002])
	(Identificador 39)
	(modalidad flexibilidad)
	(NCalorias%2Fminuto 10)
	(Nombre_Ejer "Yoga pez")
	(NRepeticiones 1)
	(Posicion "pez")
	(series 1))

([IA_Class50018] of  Flexibilidad

	(disciplina "Yoga")
	(Duraci%C3%B3n_Max 10)
	(Duraci%C3%B3n_Min 1)
	(grupos_musculares
		[IA_Class10001]
		[IA_Class20003])
	(Identificador 36)
	(modalidad flexibilidad)
	(NCalorias%2Fminuto 10)
	(Nombre_Ejer "Yoga Invertida")
	(NRepeticiones 1)
	(Posicion "Invertida")
	(series 1))

([IA_Class50019] of  Con_Aparatos

	(combina_con
		Con_Aparatos
		Estiramientos)
	(Duraci%C3%B3n_Max 20)
	(Duraci%C3%B3n_Min 20)
	(esfuerzo medio)
	(grupos_musculares
		[IA_Class2]
		[IA_Class10003]
		[IA_Class20014]
		[IA_Class20013])
	(Identificador 1)
	(modalidad velocidad)
	(NCalorias%2Fminuto 200)
	(Nombre_Ejer "Bici Estatica 20 minutos")
	(NRepeticiones 1)
	(series 1)
	(tipo_aparato bici_estatica))

([IA_Class50020] of  Con_Aparatos

	(Duraci%C3%B3n_Max 15)
	(Duraci%C3%B3n_Min 10)
	(esfuerzo medio)
	(grupos_musculares
		[IA_Class2]
		[IA_Class20008]
		[IA_Class20011])
	(Identificador 2)
	(modalidad velocidad)
	(NCalorias%2Fminuto 20)
	(Nombre_Ejer "Cinta 15 minutos")
	(NRepeticiones 1)
	(series 1)
	(tipo_aparato cinta))

([IA_Class50021] of  Con_Aparatos

	(Duraci%C3%B3n_Max 30)
	(Duraci%C3%B3n_Min 15)
	(esfuerzo medio)
	(grupos_musculares
		[IA_Class20004]
		[IA_Class10002]
		[IA_Class10001])
	(Identificador 3)
	(modalidad resistencia)
	(NCalorias%2Fminuto 15)
	(Nombre_Ejer "Remo 30 minutos")
	(NRepeticiones 1)
	(series 1)
	(tipo_aparato remo))

([IA_Class50022] of  Con_Aparatos

	(Duraci%C3%B3n_Max 50)
	(Duraci%C3%B3n_Min 40)
	(esfuerzo alto)
	(grupos_musculares [IA_Class10003])
	(Identificador 4)
	(modalidad resistencia)
	(NCalorias%2Fminuto 15)
	(Nombre_Ejer "Steps 50 minutos")
	(NRepeticiones 1)
	(series 2)
	(tipo_aparato stepper))

([IA_Class50023] of  Con_Aparatos

	(Duraci%C3%B3n_Max 30)
	(Duraci%C3%B3n_Min 25)
	(esfuerzo medio)
	(grupos_musculares [IA_Class10003])
	(Identificador 4)
	(modalidad resistencia)
	(NCalorias%2Fminuto 15)
	(Nombre_Ejer "Steps 30 minutos")
	(NRepeticiones 1)
	(series 1)
	(tipo_aparato stepper))

([IA_Class50025] of  Con_Pesas

	(Duraci%C3%B3n_Max 60)
	(Duraci%C3%B3n_Min 15)
	(esfuerzo medio)
	(grupos_musculares [IA_Class2])
	(Identificador 5)
	(modalidad fuerza)
	(NCalorias%2Fminuto 80)
	(Nombre_Ejer "Sentadilla:Barra cuatriceps 20 Kg")
	(NRepeticiones 15)
	(Pesa_Kilos "20")
	(series 5)
	(tipo_pesas barra))

([IA_Class50026] of  Con_Pesas

	(Duraci%C3%B3n_Max 60)
	(Duraci%C3%B3n_Min 15)
	(esfuerzo alto)
	(grupos_musculares [IA_Class2])
	(Identificador 5)
	(modalidad fuerza)
	(NCalorias%2Fminuto 80)
	(Nombre_Ejer "Sentadilla:Barra cuatriceps 50 Kg")
	(NRepeticiones 15)
	(Pesa_Kilos "50")
	(series 5)
	(tipo_pesas barra))

([IA_Class50027] of  Con_Pesas

	(Duraci%C3%B3n_Max 50)
	(Duraci%C3%B3n_Min 14)
	(esfuerzo medio)
	(grupos_musculares [IA_Class10002])
	(Identificador 7)
	(modalidad fuerza)
	(NCalorias%2Fminuto 40)
	(Nombre_Ejer "Barra triceps 15 Kg")
	(NRepeticiones 12)
	(Pesa_Kilos "15")
	(series 4)
	(tipo_pesas barra))

([IA_Class50028] of  Con_Pesas

	(Duraci%C3%B3n_Max 50)
	(Duraci%C3%B3n_Min 14)
	(esfuerzo alto)
	(grupos_musculares [IA_Class10002])
	(Identificador 7)
	(modalidad fuerza)
	(NCalorias%2Fminuto 40)
	(Nombre_Ejer "Barra triceps 35 Kg")
	(NRepeticiones 12)
	(Pesa_Kilos "35")
	(series 4)
	(tipo_pesas barra))

([IA_Class50029] of  Con_Pesas

	(Duraci%C3%B3n_Max 60)
	(Duraci%C3%B3n_Min 10)
	(esfuerzo medio)
	(grupos_musculares [IA_Class0])
	(Identificador 6)
	(modalidad fuerza)
	(NCalorias%2Fminuto 50)
	(Nombre_Ejer "Barra pectoral mayor 15 Kg")
	(NRepeticiones 12)
	(Pesa_Kilos "15")
	(series 4)
	(tipo_pesas barra))

([IA_Class50030] of  Con_Pesas

	(Duraci%C3%B3n_Max 60)
	(Duraci%C3%B3n_Min 10)
	(esfuerzo alto)
	(grupos_musculares [IA_Class0])
	(Identificador 6)
	(modalidad fuerza)
	(NCalorias%2Fminuto 50)
	(Nombre_Ejer "Barra pectoral mayor 30 Kg")
	(NRepeticiones 12)
	(Pesa_Kilos "30")
	(series 4)
	(tipo_pesas barra))

([IA_Class50031] of  Con_Pesas

	(combina_con
		Estiramientos
		Con_Pesas)
	(Duraci%C3%B3n_Max 15)
	(Duraci%C3%B3n_Min 10)
	(esfuerzo alto)
	(grupos_musculares [IA_Class10001])
	(Identificador 8)
	(modalidad fuerza)
	(NCalorias%2Fminuto 50)
	(Nombre_Ejer "Mancuerna Biceps 25 Kg")
	(NRepeticiones 12)
	(Pesa_Kilos "25")
	(series 4)
	(tipo_pesas mancuerna))

([IA_Class50032] of  Con_Pesas

	(combina_con
		Estiramientos
		Con_Pesas)
	(Duraci%C3%B3n_Max 15)
	(Duraci%C3%B3n_Min 10)
	(esfuerzo medio)
	(grupos_musculares [IA_Class10001])
	(Identificador 8)
	(modalidad fuerza)
	(NCalorias%2Fminuto 50)
	(Nombre_Ejer "Mancuerna Biceps 10 Kg")
	(NRepeticiones 12)
	(Pesa_Kilos "10")
	(series 4)
	(tipo_pesas mancuerna))

([IA_Class50033] of  Con_Pesas

	(Duraci%C3%B3n_Max 60)
	(Duraci%C3%B3n_Min 10)
	(esfuerzo medio)
	(grupos_musculares [IA_Class20003])
	(Identificador 9)
	(modalidad fuerza)
	(NCalorias%2Fminuto 50)
	(Nombre_Ejer "Mancuerna deltoides 6 Kg")
	(NRepeticiones 12)
	(Pesa_Kilos "6")
	(series 4)
	(tipo_pesas mancuerna))

([IA_Class50034] of  Con_Pesas

	(Duraci%C3%B3n_Max 60)
	(Duraci%C3%B3n_Min 10)
	(esfuerzo alto)
	(grupos_musculares [IA_Class20003])
	(Identificador 9)
	(modalidad fuerza)
	(NCalorias%2Fminuto 50)
	(Nombre_Ejer "Mancuerna deltoides 12 Kg")
	(NRepeticiones 12)
	(Pesa_Kilos "12")
	(series 4)
	(tipo_pesas mancuerna))

([IA_Class50037] of  Con_Pesas

	(Duraci%C3%B3n_Max 60)
	(Duraci%C3%B3n_Min 10)
	(esfuerzo medio)
	(grupos_musculares [IA_Class2])
	(Identificador 10)
	(modalidad fuerza)
	(NCalorias%2Fminuto 50)
	(Nombre_Ejer "Maquina Cuatriceps 30 Kg")
	(NRepeticiones 12)
	(Pesa_Kilos "30")
	(series 4)
	(tipo_pesas maquina))

([IA_Class50038] of  Con_Pesas

	(Duraci%C3%B3n_Max 60)
	(Duraci%C3%B3n_Min 10)
	(esfuerzo bajo)
	(grupos_musculares [IA_Class2])
	(Identificador 10)
	(modalidad fuerza)
	(NCalorias%2Fminuto 50)
	(Nombre_Ejer "Maquina Cuatriceps 10 Kg")
	(NRepeticiones 12)
	(Pesa_Kilos "10")
	(series 4)
	(tipo_pesas maquina))

([IA_Class50039] of  Con_Pesas

	(Duraci%C3%B3n_Max 60)
	(Duraci%C3%B3n_Min 10)
	(esfuerzo alto)
	(grupos_musculares [IA_Class2])
	(Identificador 10)
	(modalidad fuerza)
	(NCalorias%2Fminuto 50)
	(Nombre_Ejer "Maquina Cuatriceps 50 Kg")
	(NRepeticiones 12)
	(Pesa_Kilos "50")
	(series 4)
	(tipo_pesas maquina))

([IA_Class50040] of  Con_Pesas

	(Duraci%C3%B3n_Max 60)
	(Duraci%C3%B3n_Min 10)
	(esfuerzo bajo)
	(grupos_musculares [IA_Class10003])
	(Identificador 11)
	(modalidad fuerza)
	(NCalorias%2Fminuto 50)
	(Nombre_Ejer "Maquina gemelos 10 Kg")
	(NRepeticiones 12)
	(Pesa_Kilos "5")
	(series 4)
	(tipo_pesas maquina))

([IA_Class50041] of  Con_Pesas

	(Duraci%C3%B3n_Max 60)
	(Duraci%C3%B3n_Min 10)
	(esfuerzo medio)
	(grupos_musculares [IA_Class10003])
	(Identificador 11)
	(modalidad fuerza)
	(NCalorias%2Fminuto 50)
	(Nombre_Ejer "Maquina gemelos 10 Kg")
	(NRepeticiones 12)
	(Pesa_Kilos "20")
	(series 4)
	(tipo_pesas maquina))

([IA_Class50042] of  Con_Pesas

	(Duraci%C3%B3n_Max 60)
	(Duraci%C3%B3n_Min 10)
	(esfuerzo alto)
	(grupos_musculares [IA_Class10003])
	(Identificador 11)
	(modalidad fuerza)
	(NCalorias%2Fminuto 50)
	(Nombre_Ejer "Maquina gemelos 10 Kg")
	(NRepeticiones 12)
	(Pesa_Kilos "35")
	(series 4)
	(tipo_pesas maquina))

)

;;****** MAIN **********
;***********************

(defmodule MAIN (export ?ALL))


;;****************
;;*  TEMPLATES   *
;;****************

;;; TEMPLATES

;; dedicacion y objetivo
(deftemplate dedicacion_objetivo
	(slot dedicacion)
	(slot objetivo)
	(slot cada_cuanto_vas) 
)

(deffacts dedicaOb
	(dedicacion_objetivo
		(dedicacion desconocido)
		(objetivo desconocido)
		(cada_cuanto_vas desconocido)
	)
)


;;; Template que contiene los datos de las condiciones fisicas generales 
(deftemplate condicionesGenerales
	(slot IMC)
	(slot edad)
	(slot presion_Sanguinea)
)

(deffacts conGen
	(condicionesGenerales
		(IMC desconocido)
		(edad desconocido)
		(presion_Sanguinea desconocido)
	)
)



;;; Template que contiene los resultados de ejercicios sencillos
(deftemplate ejerciciosSencillos
	(slot flexibilidad)
	(slot fuerza)
	(slot resistencia)
	(slot velocidad)
	(slot equilibrio)
)

(deffacts ejeSenc
	(ejerciciosSencillos
		(flexibilidad desconocido)
		(fuerza desconocido)
		(resistencia desconocido)
		(velocidad desconocido)
		(equilibrio desconocido)
	)
)

;;; Template que contiene las actividades diarias del usuarui
(deftemplate actividades_diarias
	(slot en_trabajo)
	(slot fuera_trabajo)
	(slot desplazamientos)

)

(deffacts act_diarias
	(actividades_diarias
		(en_trabajo desconocido)
		(fuera_trabajo desconocido)
		(desplazamientos desconocido)
	)
)


;;; Template que contiene los valores de las enfermedades / lesiones
(deftemplate valores_enfermedades_lesiones
	(slot estado_pulmonar)
	(slot estado_cardiaco)
)

(deftemplate valores_zonas_musculos
	(slot brazos)
	(slot piernas)
	(slot torso)
)

(deftemplate valores_zonas_huesos
	(slot brazos)
	(slot piernas)
	(slot torso)
)

(deffacts zonas_musculos
	(valores_zonas_musculos
		(brazos desconocido)
		(piernas desconocido)
		(torso desconocido)
	)
)

(deffacts zonas_huesos
	(valores_zonas_huesos
		(brazos desconocido)
		(piernas desconocido)
		(torso desconocido)
	)
)


(deffacts enfermedades_lesiones
	(valores_enfermedades_lesiones
		(estado_pulmonar desconocido)
		(estado_cardiaco desconocido)
	)
)

;;; Template que contiene los valores de la dieta
(deftemplate valores_dieta
	(slot nivel_fruta)
	(slot nivel_carne)
	(slot nivel_verduras)
	(slot nivel_cereales)
	(slot nivel_legumbres)
	(slot nivel_alcohol)
	(slot nivel_refrescos)
)

(deffacts dieta
	(valores_dieta
		(nivel_fruta desconocido)
		(nivel_carne desconocido)
		(nivel_verduras desconocido)
		(nivel_cereales desconocido)
		(nivel_legumbres desconocido)
		(nivel_alcohol desconocido)
		(nivel_refrescos desconocido)
	)
)

;;; Template que contiene los valores de ejercicio abstractos
(deftemplate valoresEjercicios
	(slot esfuerzo)
	(slot asiduidad)
	(slot flexibilidad)
	(slot fuerza)
	(slot resistencia)
	(slot velocidad)
	(slot equilibrio)
)

(deffacts ejercicios
	(valoresEjercicios
		(esfuerzo desconocido)
		(asiduidad desconocido)
		(flexibilidad desconocido)
		(fuerza desconocido)
		(resistencia desconocido)
		(velocidad desconocido)
		(equilibrio desconocido)
	)
)

;;; Template que contiene el esfuerzo que puede soportar
(deftemplate valoresEsfuerzo
	(slot flexibilidad)
	(slot fuerza)
	(slot resistencia)
	(slot velocidad)
	(slot equilibrio)
)

(deffacts esfuerzo
	(valoresEsfuerzo
		(flexibilidad desconocido)
		(fuerza desconocido)
		(resistencia desconocido)
		(velocidad desconocido)
		(equilibrio desconocido)
	)
)

;;; Template que contiene las recomendacions
(deftemplate recomendacion
	(slot valor)
	(multislot lista_ejercicios)
)


;;****************
;;* DEFFUNCTIONS *
;;****************

(deffunction numero-a-valores (?numero)
	(if (eq ?numero 1 )
	then (bind ?ret bajo)
	else	(if (eq ?numero 2 )
		then (bind ?ret medio)
		else (bind ?ret alto)
		)
	)
	?ret
)

(deffunction pregunta-abierta (?pregunta)
	(printout t ?pregunta crlf)
	(bind ?resposta (read))
	?resposta
)

(deffunction pregunta (?pregunta $?valors)
	(printout t ?pregunta crlf)
	(bind ?resposta (read))
	(while (not (member ?resposta ?valors)) do
		(printout t ?pregunta)
		(bind ?resposta (read))

	)
	?resposta
)

(deffunction si-o-no (?pregunta)
	(bind ?resposta (pregunta (str-cat ?pregunta "(si/no) ") si no))
	?resposta
)

(deffunction set-nombre (?var_user)
	(bind ?res (pregunta-abierta "¿Cómo te llamas?"))
	(send ?var_user put-nombre ?res)
	true
)
(deffunction set_apellidos (?var_user)
	(bind ?res (pregunta-abierta "¿Cuales són tus apellidos?"))
	(send ?var_user put-apellidos ?res)
	true
)
(deffunction set_dni (?var_user)
	(bind ?res (pregunta-abierta "¿Cual es tu DNI?"))
	(send ?var_user put-dni ?res)
	true
)
(deffunction set_edad (?var_user)
	(bind ?res (pregunta-abierta "¿Que edad tienes?"))
	(send ?var_user put-edad ?res)
	true
)
(deffunction set_email (?var_user)
	(bind ?res (pregunta-abierta "¿Cual es tu email?"))
	(send ?var_user put-email ?res)
	true
)

(deffunction soporta_esfuerzo (?esf_usu ?esf_eje)
	(if (and (eq ?esf_usu bajo) (not (eq ?esf_eje bajo)))
	then (bind ?ret no)
	else	(if (and (eq ?esf_usu medio) (eq ?esf_eje alto))
		then (bind ?ret no)
		else (bind ?ret si)
		)
	)
	?ret
)

;;; Obtiene los ejercicios aerobicos
(deffunction obtener_aerobicos ()
	(bind $?ejers (create$))
	(do-for-all-instances
		((?ejerci Con_Aparatos))
		(insert$ $?ejers 1 (type ?ejerci))
	)
	?ejers
)

;;;Obtiene la lista de ejercicios en funcion de los objetivos
(deffunction get_lista_ejercicios (?valor ?flex ?fuer ?res ?vel ?equi)
	(bind ?lista (create$))

		(if (eq ?flex ?valor)
			then
				(bind ?lista (insert$ ?lista 1 (find-all-instances ((?apa Ejercicio)) (eq ?apa:modalidad flexibilidad)) ) )
		)
		(if (eq ?fuer ?valor)
			then
				(bind ?lista (insert$ ?lista 1 (find-all-instances ((?apa Ejercicio)) (eq ?apa:modalidad fuerza)) ) )
		)
		(if (eq ?res ?valor)
			then
				(bind ?lista (insert$ ?lista 1 (find-all-instances ((?apa Ejercicio)) (eq ?apa:modalidad resistencia)) ) )
		)
		(if (eq ?vel ?valor)
			then
				(bind ?lista (insert$ ?lista 1 (find-all-instances ((?apa Ejercicio)) (eq ?apa:modalidad velocidad)) ) )
		)
		(if (eq ?equi ?valor)
			then
				(bind ?lista (insert$ ?lista 1 (find-all-instances ((?apa Ejercicio)) (eq ?apa:modalidad equilibrio)) ) )
		)
	?lista
)

;;;Criba la lista de ejercicios en funcion del estado de salud del usuario
(deffunction criba_lista_ejercicios (?lista ?musc_brazos ?musc_piernas ?musc_torso ?hues_brazos ?hues_piernas ?hues_torso ?est_pul ?est_car ?esf)
	(bind ?idx 1)
	(bind ?del_eje (create$))
	(while (<= ?idx (length$ ?lista))
	 do
		(bind ?ej (nth$ ?idx $?lista))
		;(printout t (class ?ej) crlf)

		;*********** Tenemos las instancias que cumplen con los objetivos, ahora buscamos aquellas que no cumplan con las restricciones *******

		(bind ?list_musc (send ?ej get-grupos_musculares))
		(bind ?idx_m 1)
		(while (<= ?idx_m (length$ ?list_musc))
	 	do
			(bind ?musc (nth$ ?idx_m $?list_musc))
			(bind ?loc (send (instance-address * ?musc) get-localizacion))
			(if 
				(or 
					( and (eq ?loc brazo) (eq ?musc_brazos bajo)) 
					( and (eq ?loc pierna) (eq ?musc_piernas bajo)) 
					( and (eq ?loc torso) (eq ?musc_torso bajo)) 
					( and (eq ?loc brazo) (eq ?hues_brazos bajo)) 
					( and (eq ?loc pierna) (eq ?hues_piernas bajo)) 
					( and (eq ?loc torso) (eq ?hues_torso bajo))
					( eq soporta_esfuerzo ?esf (send ?ej get-esfuerzo) no)
					( and (eq ?est_car bajo) (not (eq (send ?ej get-esfuerzo) bajo)))
					( and (eq ?est_pul bajo) (eq (send ?ej get-esfuerzo) alto))
				)
			then
				(if (not (member ?ej ?del_eje)) then
					(bind ?del_eje (insert$ ?del_eje 1 ?ej) )
				)
			)
			(bind ?idx_m (+ ?idx_m 1))
		)
		(bind ?idx (+ ?idx 1))
	)

	;***************** Tenemos los indices de las instancias a eliminar de la lista, procedemos a ello ***********	
	(printout t "Lista original: " ?lista crlf)
	(bind ?idx 1)
	(while (<= ?idx (length$ ?del_eje))
	 do
		(bind ?to_del (nth$ ?idx $?del_eje))
		(printout t "He quitado " ?to_del crlf)
		;(delete$ ?del_eje ?to_del ?to_del) 
		(bind ?lista (delete-member$ ?lista ?to_del))
		(bind ?idx (+ ?idx 1))
	)
	(printout t "Lista cribada: " ?lista crlf)

	?lista
)


(deffunction recomendar_nivel_dieta (?alimento ?nivel_act ?nivel_obj)
	
	(if (eq ?nivel_act ?nivel_obj)
	then (printout t "El nivel de consumo de " ?alimento " es excelente. (" ?nivel_act ")" crlf)
	else (if (and (eq ?nivel_act bajo) (or(eq ?nivel_obj medio) (eq ?nivel_obj alto)))
		then (printout t "Deberías aumentar el consumo de " ?alimento " (" ?nivel_act ") a un nivel " ?nivel_obj crlf)
		else (if (and (eq ?nivel_act alto) (or(eq ?nivel_obj medio) (eq ?nivel_obj bajo)))
			then (printout t "Deberías reducir el consumo de " ?alimento " (" ?nivel_act ") a un nivel " ?nivel_obj crlf)
			else (if (and (eq ?nivel_act medio) (eq ?nivel_obj bajo))
				then (printout t "Deberías reducir el consumo de " ?alimento " (" ?nivel_act ") a un nivel " ?nivel_obj crlf)
				else (printout t "Deberías aumentar el consumo de " ?alimento " (" ?nivel_act ") a un nivel " ?nivel_obj crlf)
				)
			)
		)
	)
)


**********Hanlders*************

(defmessage-handler Ejercicio print primary (?name)
	(printout t crlf crlf "------------EJERCICIO INFO-------------" crlf) 
	(printout t "    *Tipo:" ?name  crlf) 
	(printout t "    *Calorias:" ?self:NCalorias%2Fminuto  crlf) 
	(printout t "    *Combina con:" ?self:combina_con  crlf) 
	(printout t "    *Duracion:" ?self:Duraci%C3%B3n_Max  crlf) 
	(printout t "    *Grupos musculares:" ?self:grupos_musculares  crlf) 
	(printout t "    *Series:" ?self:series  crlf)
	(printout t "    *Esfuerzo:" ?self:esfuerzo  crlf) 
	(printout t "    *Duracion:" ?self:Duraci%C3%B3n_Min  crlf) 
	(printout t "    *Modalidad:" ?self:modalidad  crlf) 
	(printout t "    *Num. repeticiones:" ?self:NRepeticiones  crlf) 
	(printout t "----------------------------------" crlf crlf) 
)



;;****************
;;*     MAIN     *
;;****************

(defrule inicio "Regla inicial de presentacio"
	(declare (salience 10000))
	=>
	(printout t crlf)
	(printout t "+------------------------------------------------+" crlf)
	(printout t "|                                                |" crlf)
	(printout t "|                    FITNESS                     |" crlf)
	(printout t "|                                                |" crlf)
	(printout t "+------------------------------------------------+" crlf)
	(focus preguntas-persona )
)

;;******************
;;* MODULO Datos Personales PERSONA *
;;******************

(defmodule preguntas-persona
	(import MAIN ?ALL)
	(export ?ALL)
)

(defrule crea-persona
	(declare (salience 9999))
	=>
;	(bind ?var_user (make-instance usuario of Persona))
;	(bind ?res (set-nombre ?var_user))
	;(bind ?res (set_apellidos ?var_user))
	;(bind ?res (set_dni ?var_user))
	;(bind ?res (set_edad ?var_user))
	;(bind ?res (set_email ?var_user))
	;(send ?var_user print)
	(bind ?res (pregunta-abierta "¿Cómo te llamas?"))
)

(defrule fin-preguntas-persona
	=>
	(printout t "fin-preguntas-persona" crlf)
	(focus modulo_condiciones_generales)
)


;************
; Modulo Condiciones generales
;************

(defmodule modulo_condiciones_generales
	(import preguntas-persona ?ALL)
	(export ?ALL)
)


(defrule define-objetivo
	(declare (salience 1000))
	?objetivo <- (dedicacion_objetivo (objetivo desconocido))
	=>
	(bind ?obj (pregunta "¿Que quieres conseguir? (muscular fibrar adelgazar flexibilidad preparar_maraton equilibrio)" muscular fibrar adelgazar flexibilidad preparar_maraton equilibrio) )
	(modify ?objetivo (objetivo ?obj))
)


(defrule define-dedicacion
	?dedica <- (dedicacion_objetivo (dedicacion desconocido) (cada_cuanto_vas ?dias) (objetivo ?obj))
	?val_eje <- (valoresEjercicios (asiduidad desconocido))
	=>
	(bind ?horas (pregunta-abierta "¿Cuantas horas dedicaras al dia?"))
	(bind ?tiempo (pregunta-abierta "¿cada cuantos dias quieres ir?" ))
	(modify ?dedica (dedicacion ?horas) (cada_cuanto_vas ?tiempo) (objetivo ?obj) )
	(bind ?asid (/ ?horas ?tiempo))
	(if (<= ?asid 1 )
	then (modify ?val_eje (asiduidad bajo))
	else	(if (<= ?asid 3 )
		then (modify ?val_eje (asiduidad medio))
		else (modify ?val_eje (asiduidad alto))
		)
	)
)


(defrule define-edad
	?condgen <- (condicionesGenerales (edad desconocido))
	=>
	;(printout t "Entro EDAD")
	(bind ?res (pregunta-abierta "¿Que edad tienes?"))
	(
		if (< ?res 12 )
		then (modify ?condgen (edad nino))
		else (
			if (< ?res 17 )
			then (modify ?condgen (edad adolescente))
			else (
				if (< ?res 59 )
				then (modify ?condgen (edad adulto))
				else (modify ?condgen (edad anciano))
			)
		)
	 )
)

(defrule define-IMC
	?condgen <- (condicionesGenerales (IMC desconocido))
	=>
	;(printout t "IMC entro")
	(bind ?altura (pregunta-abierta "¿Cuando mides, en metros?"))	
	(bind ?peso (pregunta-abierta "¿Cuando pesas?"))
	(bind ?imc (/ ?peso (* ?altura ?altura)) ) 
	(
		if (< ?imc 18 )
		then (modify ?condgen (IMC bajo))
		else (
			if (< ?imc 24.9 )
			then (modify ?condgen (IMC normal))
			else (
				if (< ?imc 29.9 )
				then (modify ?condgen (IMC sobrepeso))
				else (modify ?condgen (IMC obeso))
			)
		)
	)
)

(defrule define-presionSang
	?condgen <- (condicionesGenerales (presion_Sanguinea desconocido))
	=>
	(bind ?min (pregunta-abierta "¿Cual es tu presion sanguinea mínima?") )
	(bind ?max (pregunta-abierta "¿Y la máxima?") )
	(
		if (and (<= ?min 80) (<= ?max 120) )
		then (modify ?condgen (presion_Sanguinea optima))
		else (
			if (and (<= ?max 130)  (<= ?min 85) )
			then (modify ?condgen (presion_Sanguinea normal))
			else (
				if (and (<= ?max 140)  (<= ?min 90) )
				then (modify ?condgen (presion_Sanguinea alta))
				else (modify ?condgen (presion_Sanguinea hiper))
			)
		)
	)
)

(defrule fin-condiciones-generales
	=>
	(printout t "fin-condiciones-generales" crlf)
	(focus modulo_ejercicios_sencillos)
)

;*****************
; *** Modulo ejercicios Sencillos
; ****************

(defmodule modulo_ejercicios_sencillos
	(import  modulo_condiciones_generales ?ALL)
	(export ?ALL)
)


(defrule define_flexibilidad
	?ejersenc <- (ejerciciosSencillos (flexibilidad desconocido))
	=>
	(printout t "De pie, con las piernas rectas, intenta tocarte los pies." crlf)
	(printout t "1 - Por encima de los pies, 2 - Con las puntas en los pies." crlf)
	(printout t "3 - Con las puntas al suelo, 4 - Con el puño al suelo." crlf)
	(printout t "5 - Palma plana al suelo." crlf)
	(bind ?flex (pregunta "¿ Como llegas?" 1 2 3 4 5 ) )
	(if (= ?flex 1)
	then
		(modify ?ejersenc (flexibilidad bajo) ) 
	
	else	
		(	
			if (or (= ?flex 2) (= ?flex 3) (= ?flex 4))
			then (modify ?ejersenc (flexibilidad medio) )
			else
				(	
					if (= ?flex 5)
					then (modify ?ejersenc (flexibilidad alto) )
					else
				)
		)
	)
)

(defrule define_fuerza
	?ejersenc <- (ejerciciosSencillos (fuerza desconocido))
	=>
	(printout t "Con 10 kilos en una mancuerna, levantala y bajala por encima de la cabeza 15 veces." crlf)
	(printout t "1 - No acabo el ejercicio, 2 - Acabo muy cansado." crlf)
	(printout t "3 - Resisto bien y podria intentar alguna mas, 4 - Acabo y podria hacer otra serie sin descanso." crlf)
	(printout t "5 - Podria levantar 10 como ásta." crlf)
	(bind ?fuer (pregunta "¿Que sensaciones tienes despues del ejercicio?" 1 2 3 4 5 ) )
	(if (= ?fuer 1)
	then
		(modify ?ejersenc (fuerza bajo) ) 
	else	
		(	
			if (or (= ?fuer 2) (= ?fuer 3))
			then (modify ?ejersenc (fuerza medio) )
			else
				(	
					if ( or (= ?fuer 5) (= ?fuer 4) )
					then (modify ?ejersenc (fuerza alto) )
					else
				)
		)
	)
)	

(defrule define_resistencia
	?ejersenc <- (ejerciciosSencillos (resistencia desconocido))
	=>
	(printout t "Sube y baja 15 escalones repetidamente hasta que notes cansancio" crlf)
	(printout t "1 - 5 o menos minutos, 2 - De 5 a 10 minutos." crlf)
	(printout t "3 - De 10 a 15, 4 - De 15 a 20." crlf)
	(printout t "5 - Mas de 20 y he parado por aburrimiento." crlf)
	(bind ?resis (pregunta "¿Cuantos minutos has aguantado?" 1 2 3 4 5 ) )
	(if (or (= ?resis 2) (= ?resis 1) )
	then
		(modify ?ejersenc (resistencia bajo) ) 
	else	
		(	
			if (= ?resis 3)
			then (modify ?ejersenc (resistencia medio) )
			else
				(	
					if ( or (= ?resis 5) (= ?resis 4) )
					then (modify ?ejersenc (resistencia alto) )
					else
				)
		)
	)
)	

(defrule define_velocidad
	?ejersenc <- (ejerciciosSencillos (velocidad desconocido))
	=>
	(printout t "Mide cien metros y correlos lo más rapido que puedas." crlf)
	(printout t "1 - Más de 1 minuto, 2 - Entre 40 segundos y 1 minuto." crlf)
	(printout t "3 - De 25 a 40 segundos, 4 - de 11 segundos a 25." crlf)
	(printout t "5 - Por debajo de 11 segundos" crlf)
	(bind ?velo (pregunta "¿Cuanto has tardado?" 1 2 3 4 5 ) )
	(if  (= ?velo 1) 
	then
		(modify ?ejersenc (velocidad bajo) ) 
	else	
		(	
			if (or (= ?velo 2) (= ?velo 3) )
			then (modify ?ejersenc (velocidad medio) )
			else
				(	
					if ( or (= ?velo 5) (= ?velo 4) )
					then (modify ?ejersenc (velocidad alto) )
					else
				)
		)
	)
)	

(defrule define_equilibrio
	?ejersenc <- (ejerciciosSencillos (equilibrio desconocido))
	=>
	(printout t "Haz la forma de la balanza." crlf)
	(printout t "1 - Menos de dos minutos, 2 - Entre 2 y 4 minutos." crlf)
	(printout t "3 - Entre 4 y 7 minutos, 4 - de 7 a 10 minutos." crlf)
	(printout t "5 - Más de 10 minutos." crlf)
	(bind ?equi (pregunta "¿Cuanto has aguanta?" 1 2 3 4 5 ) )
	(if  (= ?equi 1) 
	then
		(modify ?ejersenc (equilibrio bajo) ) 
	else	
		(	
			if (or (= ?equi 2) (= ?equi 3) )
			then (modify ?ejersenc (equilibrio medio) )
			else
				(	
					if ( or (= ?equi 5) (= ?equi 4) )
					then (modify ?ejersenc (equilibrio alto) )
					else
				)
		)
	)
)	

(defrule fin-modulo_ejercicios_sencillos
	=>
	(printout t "fin-modulo_ejercicios_sencillos" crlf)
	(focus modulo_actividades_fisicas_diarias)
)	


;*****************
; *** Modulo actividades físicas diarias
;****************

(defmodule modulo_actividades_fisicas_diarias
	(import  modulo_ejercicios_sencillos ?ALL)
	(export ?ALL)
)


(defrule define_trabajo
	?en_trab <- (actividades_diarias (en_trabajo desconocido))
	=>
	(bind ?t1 (si-o-no "¿Trabajas de pie?" ) )
	(bind ?t2 (si-o-no "¿Levantas peso manualmente?" ) )

	(bind ?t3 (si-o-no "¿Andas largas distancias?" ) )
	(bind ?num 0)
	(if (eq ?t1 si)
	then
		(bind ?num (+ ?num 10))
	)
	(if (eq ?t2 si)
	then
		(bind ?num (+ ?num 10))
	)
	(if (eq ?t3 si)
	then
		(bind ?num (+ ?num 10))
	)

	(if (<= ?num 10)
	then
		(modify ?en_trab (en_trabajo bajo))
	else
		(	
			if (= ?num 20)
			then (modify ?en_trab (en_trabajo medio) )
			else
				(	
					if (= ?num 30)
					then (modify ?en_trab (en_trabajo alto) )
				)
		)

	)
)

(defrule define_fuera_trabajo
	?fu_trab <- (actividades_diarias (fuera_trabajo desconocido))
	=>
	(bind ?t1 (si-o-no "¿Practicas algun deporte con frecuencia?" ) )
	(bind ?t2 (si-o-no "¿Realizas tareas domesticas?" ) )
	(bind ?t3 (si-o-no "¿Realizas paseos (minimo 1 hora diaria)?" ) )

	(bind ?num 0)
	(if (eq ?t1 si)
	then
		(bind ?num (+ ?num 10))
	)
	(if (eq ?t2 si)
	then
		(bind ?num (+ ?num 10))
	)
	(if (eq ?t3 si)
	then
		(bind ?num (+ ?num 10))
	)

	(if (<= ?num 10)
	then
		(modify ?fu_trab (fuera_trabajo bajo))
	else
		(	
			if (= ?num 20)
			then (modify ?fu_trab (fuera_trabajo medio) )
			else
				(	
					if (= ?num 30)
					then (modify ?fu_trab (fuera_trabajo alto) )
				)
		)

	)
)	

(defrule define_desplazamientos
	?despl <- (actividades_diarias (desplazamientos desconocido))
	=>
	(bind ?tiempo (pregunta-abierta "¿Cuantos minutos dedicas a desplazarte?" ) )
	(bind ?veh (pregunta "¿En que haces este desplazamiento?( coche moto autobus metro bici pie)" coche moto autobus metro bici pie ) )

	(if (eq ?veh pie) 
	then
			(bind ?valor (* 2 ?tiempo))
	else 
				(	if (eq ?veh bici)
				then
				(bind ?valor ?tiempo)
				else 
						(if (or(eq ?veh coche) (eq ?veh moto) (eq ?veh autobus) (eq ?veh metro) )
						then
							(bind ?valor 0)					
						)
				)
  	)

	(if (>= ?valor 120)
	then
		(modify ?despl (desplazamientos alto))
	)
	(if (>= ?valor 60)
	then
		(modify ?despl (desplazamientos medio))
	)
	(if (< ?valor 60)
	then
		(modify ?despl (desplazamientos bajo))
	)

)	

(defrule fin-modulo_actividades_fisicas_diarias
	=>
	(printout t "fin-modulo_actividades_fisicas_diarias" crlf)
	(focus modulo_enfermedades_lesiones)
)	


;*****************
; *** Modulo Enfermedades/Lesiones
; ****************

(defmodule modulo_enfermedades_lesiones
	(import  modulo_actividades_fisicas_diarias ?ALL)
	(export ?ALL)
)

(defrule define_estado_salud
	?val_musc <- (valores_zonas_musculos (brazos desconocido) (piernas desconocido) (torso desconocido))
	?val_hues <- (valores_zonas_huesos (brazos desconocido) (piernas desconocido) (torso desconocido))
	?enf <- (valores_enfermedades_lesiones (estado_pulmonar desconocido) (estado_cardiaco desconocido))
	=>
	(bind ?resp (si-o-no "¿Sufres de alguna enfermedad respiratoria?" ) )
	(bind ?card (si-o-no "¿Sufres de alguna enfermedad cardiovascular?" ) )
	(bind ?musc (si-o-no "¿Sufres de molestias en algun músculo?" ) )
	(if 
		(eq ?musc si) 
	then
		(printout t crlf "A continuación vamos a mostrarle una lista de las diferentes áreas del cuerpo, seleccione aquellas en las que se sufra de algún problema." crlf)
		(bind ?area_musc (create$))
		(bind ?select indefinido)
		(while (not (eq ?select 4)) do
			(bind ?select (pregunta "1. Brazos      2. Piernas      3. Torso      4. [Finalizar]" 1 2 3 4 ) )
			(if (not (member ?select ?area_musc)) then
				(bind ?area_musc (insert$ ?area_musc 1 ?select) )
			)	
		)

		(bind ?brazos alto)
		(bind ?piernas alto)		
		(bind ?torso alto)	
			
		(if (member 1 ?area_musc) then
			(bind ?brazos bajo)
		)
		(if (member 2 ?area_musc) then
			(bind ?piernas bajo)
		)
		(if (member 3 ?area_musc) then
			(bind ?torso bajo)
		)
		(modify ?val_musc (brazos ?brazos) (piernas ?piernas) (torso ?torso))
	else 	
		(modify ?val_musc (brazos alto) (piernas alto) (torso alto))
	)

	(bind ?hues (si-o-no "¿Sufres alguna enfermedad ósea o te has fracturado algún hueso anteriormente?" ) )

	(if 
		(eq ?hues si) 
	then
		(printout t crlf "A continuación vamos a mostrarle una lista de las diferentes áreas del cuerpo, seleccione aquellas en las que se sufra de algún problema." crlf)
		(bind ?area_hues (create$))
		(bind ?select indefinido)
		(while (not (eq ?select 4)) do
			(bind ?select (pregunta "1. Brazos      2. Piernas      3. Torso      4. [Finalizar]" 1 2 3 4 ) )
			(if (not (member ?select ?area_hues)) then
				(bind ?area_hues (insert$ ?area_hues 1 ?select) )
			)	
		)

		(bind ?brazos alto)
		(bind ?piernas alto)		
		(bind ?torso alto)	
			
		(if (member 1 ?area_hues) then
			(bind ?brazos bajo)
		)
		(if (member 2 ?area_hues) then
			(bind ?piernas bajo)
		)
		(if (member 3 ?area_hues) then
			(bind ?torso bajo)
		)
		(modify ?val_hues (brazos ?brazos) (piernas ?piernas) (torso ?torso))
	else 	
		(modify ?val_hues (brazos alto) (piernas alto) (torso alto))
	)


	(if 
		(eq ?resp si) 
	then
		
		(bind ?resp_val bajo)
		
	else 	
		(bind ?resp_val alto)
	)
	
	(if 
		(eq ?card si) 
	then
		(bind ?card_val bajo)
	else 	
		(bind ?card_val alto)
	)

	(modify ?enf (estado_pulmonar ?resp_val) (estado_cardiaco ?card_val))
  )	


(defrule fin-modulo_enfermedades_lesiones
	=>
	(printout t "fin-modulo_enfermedades_lesiones" crlf)
	(focus modulo_dieta)
)	


;*****************
; *** Modulo Dieta
; ****************

(defmodule modulo_dieta
	(import modulo_enfermedades_lesiones ?ALL)
	(export ?ALL)
)

(defrule define_dieta
	?dieta <- (valores_dieta (nivel_fruta desconocido) (nivel_carne desconocido) (nivel_verduras desconocido) (nivel_cereales desconocido) (nivel_legumbres desconocido) (nivel_alcohol desconocido) (nivel_refrescos desconocido))
	=>
	(bind ?fruta (pregunta "¿Que cantidad de fruta consume a la semana? (Del 3 a 1 siendo 3 Mucha y 1 Poca o ninguna)" 1 2 3))
	(bind ?carne (pregunta "¿Que cantidad de carne consume a la semana? (Del 3 a 1 siendo 3 Mucha y 1 Poca o ninguna)" 1 2 3))
	(bind ?verduras (pregunta "¿Que cantidad de verduras consume a la semana? (Del 3 a 1 siendo 3 Mucha y 1 Poca o ninguna)" 1 2 3))
	(bind ?cereales (pregunta "¿Que cantidad de cereales consume a la semana? (Del 3 a 1 siendo 3 Mucha y 1 Poca o ninguna)" 1 2 3))
	(bind ?legumbres (pregunta "¿Que cantidad de legumbres consume a la semana? (Del 3 a 1 siendo 3 Mucha y 1 Poca o ninguna)" 1 2 3))
	(bind ?alcohol (pregunta "¿Que cantidad de alcohol consume a la semana? (Del 3 a 1 siendo 3 Mucha y 1 Poca o ninguna)" 1 2 3))
	(bind ?refrescos (pregunta "¿Que cantidad de refrescos consume a la semana? (Del 3 a 1 siendo 3 Mucha y 1 Poca o ninguna)" 1 2 3))
	
	(modify ?dieta (nivel_fruta (numero-a-valores ?fruta)) (nivel_carne (numero-a-valores ?carne)) (nivel_verduras (numero-a-valores ?verduras)) (nivel_cereales (numero-a-valores ?cereales)) (nivel_legumbres (numero-a-valores ?legumbres)) (nivel_alcohol (numero-a-valores ?alcohol)) (nivel_refrescos (numero-a-valores ?refrescos)))
	
)

(defrule fin-modulo_dieta
	=>
	(printout t "fin-modulo_dieta" crlf)
	(focus modulo_asociacion_heuristica)
)	



;*****************
; ****************

;(defmessage-handler condicionesGenerales get-edad ()
;	(printout t "    *Edad:" ?self:edad  crlf)  
;)

(defmodule modulo_asociacion_heuristica
	(import  modulo_condiciones_generales ?ALL)
	(export ?ALL)
)


(defrule define-esfuerzo-ejercicios
	?esf <- (valoresEsfuerzo (flexibilidad desconocido))
	(ejerciciosSencillos (flexibilidad ?flex))
	(ejerciciosSencillos (fuerza ?fuer))
	(ejerciciosSencillos (resistencia ?resi))
	(ejerciciosSencillos (velocidad ?velo))
	(ejerciciosSencillos (equilibrio ?equi))
	=>
	(modify ?esf (flexibilidad ?flex)(fuerza ?fuer)(resistencia ?resi)(velocidad ?velo)(equilibrio ?equi))
)

(defrule define-esfuerzofisico-bajo
	?valorheur <- (valoresEjercicios (esfuerzo desconocido))
	(or
		(and
			(and (valores_zonas_musculos (piernas bajo)) (valores_zonas_musculos (brazos bajo)) (valores_zonas_musculos (torso bajo)))
			(and (valores_zonas_huesos (piernas bajo)) (valores_zonas_huesos (brazos bajo)) (valores_zonas_huesos (torso bajo)))
			(valores_enfermedades_lesiones (estado_pulmonar bajo))
		)
		(condicionesGenerales (edad nino))
		(valores_enfermedades_lesiones (estado_cardiaco bajo))
	)	
	
	=>
	(modify ?valorheur (esfuerzo bajo))
)

(defrule define-esfuerzofisico-medio
	?valorheur <- (valoresEjercicios (esfuerzo desconocido))
	(or
		(or (valores_zonas_musculos (piernas bajo)) (valores_zonas_musculos (brazos bajo)) (valores_zonas_musculos (torso bajo)))
		(or (valores_zonas_huesos (piernas bajo)) (valores_zonas_huesos (brazos bajo)) (valores_zonas_huesos (torso bajo)))
		(condicionesGenerales (edad adolescente))
		(valores_enfermedades_lesiones (estado_pulmonar bajo))
	)
	=>
	(modify ?valorheur (esfuerzo medio))
)

(defrule define-esfuerzofisico-alto
	?valorheur <- (valoresEjercicios (esfuerzo desconocido))
	(and
		(and (valores_zonas_musculos (piernas alto)) (valores_zonas_musculos (brazos alto)) (valores_zonas_musculos (torso alto)))
		(and (valores_zonas_huesos (piernas alto)) (valores_zonas_huesos (brazos alto)) (valores_zonas_huesos (torso alto)))
		(and (valores_enfermedades_lesiones (estado_pulmonar alto)) (valores_enfermedades_lesiones (estado_cardiaco alto)) )
	)
	=>
	(modify ?valorheur (esfuerzo alto))
)

(defrule define-muscular
	?valorheur <- (valoresEjercicios (flexibilidad desconocido))
	(dedicacion_objetivo (objetivo muscular))
	=>
	(modify ?valorheur (flexibilidad media) (fuerza alto) (resistencia bajo) (velocidad bajo) (equilibrio bajo))
)

(defrule define-fibrar
	?valorheur <- (valoresEjercicios (flexibilidad desconocido))
	(dedicacion_objetivo (objetivo fibrar))
	=>
	(modify ?valorheur (flexibilidad medio) (fuerza medio) (resistencia medio) (velocidad medio) (equilibrio medio))
)

(defrule define-adelgazar
	?valorheur <- (valoresEjercicios (flexibilidad desconocido))
	(dedicacion_objetivo (objetivo adelgazar))
	=>
	(modify ?valorheur (flexibilidad bajo) (fuerza bajo) (resistencia alto) (velocidad alto) (equilibrio bajo))
)

(defrule define-preparar_maraton
	?valorheur <- (valoresEjercicios (flexibilidad desconocido))
	(dedicacion_objetivo (objetivo preparar_maraton))
	=>
	(modify ?valorheur (flexibilidad bajo) (fuerza bajo) (resistencia alto) (velocidad medio) (equilibrio medio))
)

(defrule define-flexibilidad
	?valorheur <- (valoresEjercicios (flexibilidad desconocido))
	(dedicacion_objetivo (objetivo flexibilidad))
	=>
	(modify ?valorheur (flexibilidad alto) (fuerza bajo) (resistencia bajo) (velocidad bajo) (equilibrio medio))
)

(defrule define-equilibrio
	?valorheur <- (valoresEjercicios (flexibilidad desconocido))
	(dedicacion_objetivo (objetivo equilibrio))
	=>
	(modify ?valorheur (flexibilidad medio) (fuerza bajo) (resistencia bajo) (velocidad bajo) (equilibrio alto))
)

(defrule fin-modulo-asociacion
	=>
	(printout t "fin-modulo-asociacion heuristica" crlf)
	(focus modulo_refinamiento)
)

;*******************
;********* Modulo Refinamiento
;*******************

(defmodule modulo_refinamiento
	(import  modulo_asociacion_heuristica ?ALL)
	(export ?ALL)
)

(defrule inicializa-lista-recomendaciones "Inicializamos la lista y añadimos la bici estatica"
	(declare (salience 10))
	(not (recomendacion))
	=>
	(printout t "inicializo lista" crlf )
	(bind ?recomend (assert (recomendacion)))
	(modify ?recomend (valor iniciado))
)

(defrule buscar_altos
	?valorheur <- (valoresEjercicios (flexibilidad ?flex) (fuerza ?fuer) (resistencia ?res) (velocidad ?vel) (equilibrio ?equi) (esfuerzo ?esf))
	?recomend <- (recomendacion (valor iniciado) (lista_ejercicios $?le ) )
	(valores_zonas_musculos (piernas ?musc_piernas)(brazos ?musc_brazos)(torso ?musc_torso))
	(valores_zonas_huesos (piernas ?hues_piernas)(brazos ?hues_brazos)(torso ?hues_torso))
	(valores_enfermedades_lesiones (estado_pulmonar ?est_pul)(estado_cardiaco ?est_car))
	(not (altos si) )
	=>
	(printout t "entro en regla" crlf )
	(assert (altos si))

	(bind ?lista (get_lista_ejercicios alto ?flex ?fuer ?res ?vel ?equi))
	(bind ?lista (criba_lista_ejercicios ?lista ?musc_brazos ?musc_piernas ?musc_torso ?hues_brazos ?hues_piernas ?hues_torso ?est_pul ?est_car ?esf))
	(modify ?recomend (lista_ejercicios (insert$ $?le 1 $?lista )))
)


(defrule buscar_medios
	?valorheur <- (valoresEjercicios (flexibilidad ?flex) (fuerza ?fuer) (resistencia ?res) (velocidad ?vel) (equilibrio ?equi) (esfuerzo ?esf) )
	?recomend <- (recomendacion (valor iniciado) (lista_ejercicios $?le ) )
	(valores_zonas_musculos (piernas ?musc_piernas)(brazos ?musc_brazos)(torso ?musc_torso))
	(valores_zonas_huesos (piernas ?hues_piernas)(brazos ?hues_brazos)(torso ?hues_torso))
	(valores_enfermedades_lesiones (estado_pulmonar ?est_pul)(estado_cardiaco ?est_car))
	(not (medios si) )
	=>
	(printout t "entro en regla" crlf )
	(assert (medios si))

	(bind ?lista (get_lista_ejercicios medio ?flex ?fuer ?res ?vel ?equi))
	(bind ?lista (criba_lista_ejercicios ?lista ?musc_brazos ?musc_piernas ?musc_torso ?hues_brazos ?hues_piernas ?hues_torso ?est_pul ?est_car ?esf))
	(modify ?recomend (lista_ejercicios (insert$ $?le 1 $?lista )))
)

(defrule fin-modulo-refinamiento
	=>
	(printout t "fin-modulo-refinamiento" crlf)
	(focus modulo_generar_horario)
)


;*******************
;********* Modulo generación horario
;*******************

(defmodule modulo_generar_horario
	(import  modulo_refinamiento ?ALL)
	(export ?ALL)
)

;;; "Generamos un horario con los ejercicios obtenidos"
(defrule generar-horario
	?recomend <- (recomendacion (valor iniciado) (lista_ejercicios $?le ) )
	?dedica <- (dedicacion_objetivo (dedicacion ?dedi) (objetivo ?obj) (cada_cuanto_vas ?dias) )                
	=>
	; La dedicación es el numero de horas que dedica en un dia
	; dias contiene cada cuantos dias va, es decir, 1 cada dia, 2 cada dos, etc.


  (printout t "Entrando en generar horario" crlf)

  (bind ?ldias (create$ Lunes Martes Miercoles Jueves Viernes Sabado Domingo)) ; lista de dias

  (bind ?i 1)
  (bind ?numdias 1)
  (bind ?numej 1)

	(printout t "dedicacion: " ?dedi  crlf)
  (printout t "obj: " ?obj  crlf)
  (printout t "cada_cuanto_vas: " ?dias  crlf crlf)

   (printout t "**************  HORARIO  ************** " crlf crlf)

   (bind ?restaminutos (* ?dedi 60))

   (if (> (length$ ?le) 0)
   then        


        (while (<= ?numdias 7 )
         do
							(printout t "----------- " (nth$ ?numdias $?ldias)  crlf)

							(bind ?listidents (create$))

							(if (eq (length$ ?le) ?i)
              then (bind ?i 1)
              )

              (bind ?minutos_restantes ?restaminutos)
              (bind ?tiempo (send  (instance-address * (nth$ ?i $?le)) get-Duraci%C3%B3n_Max ))

               (printout t "Minutos por asignar: " ?minutos_restantes crlf)

								(bind ?sig true)
               (while (eq ?sig true)
               do                
												(if (not(member (send  (instance-address * (nth$ ?i $?le)) get-Identificador) ?listidents))
                         then

												 (bind ?tiempo  (send  (instance-address * (nth$ ?i $?le)) get-Duraci%C3%B3n_Max ))
													(if (<= (send  (instance-address * (nth$ ?i $?le)) get-Duraci%C3%B3n_Max ) ?minutos_restantes) 
													then
                         (printout t "Ejercicio: " (send  (instance-address * (nth$ ?i $?le)) get-Nombre_Ejer) "   tiempo gastado: " ?tiempo crlf)
													)
               
                          (bind ?minutos_restantes (- ?minutos_restantes ?tiempo))
													(bind ?listidents (insert$ ?listidents 1 (send  (instance-address * (nth$ ?i $?le)) get-Identificador)))


													(if (= (length$ ?listidents) (length$ ?le))
														then (bind ?sig false)
														else
																(if (eq (length$ ?le) ?i)
			                       		then (bind ?i 1)
    			                			)
																(bind ?oldi ?i)
																(bind ?i (+ ?i 1) )
																(while  (and(> (send  (instance-address * (nth$ ?i $?le)) get-Duraci%C3%B3n_Max ) ?minutos_restantes) (not(= ?i ?oldi)) )
																do (if (eq (length$ ?le) ?i)
				  	                     		then (bind ?i 1)
      					                 		)
																	  (bind ?i (+ ?i 1) )

														 				(if (eq (length$ ?le) ?i)
							                       then (bind ?i 1)
      							                )
																
																)
																(if (= ?i ?oldi)
																then (bind ?sig false)
																else (bind ?i (- ?i 1) )
																)

                         )
													else (bind ?i (+ ?i 1) )
												 )

													(if (not(= (length$ ?listidents) (length$ ?le)))
													then
                         	(bind ?i (+ ?i 1) )
												 	;(bind ?tiempo (send  (instance-address * (nth$ ?i $?le)) get-Duraci%C3%B3n_Max ))
												  )
              )                        

       (bind ?numdias (+ ?numdias ?dias))

       )

       else (printout t "El sistema no ha podido recomendar un ejercicio en funcion de tus necesidades" crlf)
       )
)



(defrule fin-modulo-generar_horario
	=>
	(printout t "fin-generar_horario" crlf)
	(focus modulo_recomendar_dieta)
)

;*******************
;********* Modulo recomencadión de dieta
;*******************

(defmodule modulo_recomendar_dieta
	(import  modulo_generar_horario ?ALL)
	(export ?ALL)
)

(defrule recomienda_dieta
	?dieta <- (valores_dieta (nivel_fruta ?n_fru)(nivel_carne ?n_car)(nivel_verduras ?n_ver)(nivel_cereales ?n_cer)(nivel_legumbres ?n_leg)(nivel_alcohol ?n_alc)(nivel_refrescos ?n_ref))
	(dedicacion_objetivo (objetivo ?obj))
	(not (dieta_recomendada si) )
	=>
	(assert (dieta_recomendada si))
	
	(printout t "Hemos analizado tu dieta y en función de tus objetivos y estado de salud creemos conveniente remarcar que:" crlf)
	(if (eq ?obj muscular)
	then
		(recomendar_nivel_dieta fruta ?n_fru alto)
		(recomendar_nivel_dieta carne ?n_car medio)
		(recomendar_nivel_dieta verduras ?n_ver alto)
		(recomendar_nivel_dieta cereales ?n_cer alto)
		(recomendar_nivel_dieta legumbres ?n_leg alto)
		(recomendar_nivel_dieta alcohol ?n_alc bajo)
		(recomendar_nivel_dieta refrescos ?n_ref medio)
	else 	(if (eq ?obj fibrar)
		then	
			(recomendar_nivel_dieta fruta ?n_fru alto)
			(recomendar_nivel_dieta carne ?n_car bajo)
			(recomendar_nivel_dieta verduras ?n_ver alto)
			(recomendar_nivel_dieta cereales ?n_cer medio)
			(recomendar_nivel_dieta legumbres ?n_leg medio)
			(recomendar_nivel_dieta alcohol ?n_alc bajo)
			(recomendar_nivel_dieta refrescos ?n_ref bajo)
		else 	(if (eq ?obj adelgazar)
			then 
				(recomendar_nivel_dieta fruta ?n_fru medio)
				(recomendar_nivel_dieta carne ?n_car bajo)
				(recomendar_nivel_dieta verduras ?n_ver alto)
				(recomendar_nivel_dieta cereales ?n_cer medio)
				(recomendar_nivel_dieta legumbres ?n_leg medio)
				(recomendar_nivel_dieta alcohol ?n_alc bajo)
				(recomendar_nivel_dieta refrescos ?n_ref bajo)
			else 	(if (eq ?obj flexibilidad)
				then 
					(recomendar_nivel_dieta fruta ?n_fru alto)
					(recomendar_nivel_dieta carne ?n_car bajo)
					(recomendar_nivel_dieta verduras ?n_ver alto)
					(recomendar_nivel_dieta cereales ?n_cer medio)
					(recomendar_nivel_dieta legumbres ?n_leg medio)
					(recomendar_nivel_dieta alcohol ?n_alc bajo)
					(recomendar_nivel_dieta refrescos ?n_ref bajo)
				else 	(if (eq ?obj preparar_maraton)
					then
						(recomendar_nivel_dieta fruta ?n_fru alto)
						(recomendar_nivel_dieta carne ?n_car medio)
						(recomendar_nivel_dieta verduras ?n_ver medio)
						(recomendar_nivel_dieta cereales ?n_cer alto)
						(recomendar_nivel_dieta legumbres ?n_leg alto)
						(recomendar_nivel_dieta alcohol ?n_alc bajo)
						(recomendar_nivel_dieta refrescos ?n_ref medio)
					else 	(if (eq ?obj equilibrio)
						then 
							(recomendar_nivel_dieta fruta ?n_fru medio)
							(recomendar_nivel_dieta carne ?n_car bajo)
							(recomendar_nivel_dieta verduras ?n_ver alto)
							(recomendar_nivel_dieta cereales ?n_cer alto)
							(recomendar_nivel_dieta legumbres ?n_leg medio)
							(recomendar_nivel_dieta alcohol ?n_alc bajo)
							(recomendar_nivel_dieta refrescos ?n_ref bajo)
						)
					)
				)
			)
		)
	)
	(focus modulo_recomendar_dieta)
)
